Download .Rmd (won’t work in Safari or IE)
See GitHub Repository
#purrr In my opinion, purrr is one of the most underrated and under-utilized R packages. It has completely revolutionized my own efficiency and workspace organization, particularly as someone who works with super messy data that comes in a variety of forms.
In this tutorial, we are going to cover a number of what I believe are the most functional and important applications of purrr in psychological research. Given the audience, in the first half of the tutorial, I will focus on working with the diverse forms of data that many of you work with, providing examples of how to load, clean, and merge data using purrr. In the second half, I will focus on how we can use purrr with longitudinal data analysis when we are working with multiple predictors and outcomes.
Before we get there, though, I think it’s useful to think about when and where we would use purrr.
Iteration is everywhere. It underpins much of mathematics and statistics. If you’ve ever seen the \(\Sigma\) symbol, then you’ve seen (and probably used) iteration.
It’s also incredibly useful. Anytime you have to repeat some sort of action many times, iteration is your best friend. In psychology, this often means reading in a bunch of individual data files from an experiment, repeating an analysis with a series of different predictors or outcomes, or creating a series of figures.
## Loading required package: Matrix
## ── Attaching packages ──────────────────────────────────────────────────────────────────────────── tidyverse 1.2.1 ──
## ✔ ggplot2 3.2.1 ✔ purrr 0.3.0
## ✔ tibble 2.0.1 ✔ dplyr 0.8.3
## ✔ tidyr 0.8.2 ✔ stringr 1.4.0
## ✔ readr 1.1.1 ✔ forcats 0.3.0
## ── Conflicts ─────────────────────────────────────────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ ggplot2::%+%() masks psych::%+%()
## ✖ ggplot2::alpha() masks psych::alpha()
## ✖ dplyr::arrange() masks plyr::arrange()
## ✖ purrr::compact() masks plyr::compact()
## ✖ dplyr::count() masks plyr::count()
## ✖ tidyr::expand() masks Matrix::expand()
## ✖ dplyr::failwith() masks plyr::failwith()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::group_rows() masks kableExtra::group_rows()
## ✖ dplyr::id() masks plyr::id()
## ✖ dplyr::lag() masks stats::lag()
## ✖ dplyr::mutate() masks plyr::mutate()
## ✖ dplyr::rename() masks plyr::rename()
## ✖ dplyr::summarise() masks plyr::summarise()
## ✖ dplyr::summarize() masks plyr::summarize()
Enter for loops. for loops are the “OG” form of iteration in computer science. The basic syntax is below. Basically, we can use a for loop to loop through and print a series of things.
## [1] "a"
## [1] "b"
## [1] "c"
## [1] "d"
## [1] "e"
The code above “loops” through 5 times, printing the iteration letter.
Essentially, like the apply(), lapply(), sapply(), and mapply() family of functions, purrr is meant to be an alternative to iteration (i.e. for loops) in R. for loops are great, but they aren’t as great in R as they are in other programming languages. In R, you’re better off vectorizing or building in C++ backends.
So the purrr equivalent would be:
## [1] "a"
## [1] "b"
## [1] "c"
## [1] "d"
## [1] "e"
## [[1]]
## [1] "a"
##
## [[2]]
## [1] "b"
##
## [[3]]
## [1] "c"
##
## [[4]]
## [1] "d"
##
## [[5]]
## [1] "e"
Regardless of the programmatic form, iteration is everywhere. It underpins much of mathematics and statistics. If you’ve ever seen the \(\Sigma\) symbol, then you’ve seen (and probably used) iteration.
It’s also incredibly useful. Anytime you have to repeat some sort of action many times, iteration is your best friend. In psychology, this could mean reading in a bunch of separate data files (with separate files for different people, variables, waves, etc.) or performing a number of regressions or other statistical tests.
To demonstrate the first case in which I find purrr useful, we are going to consider a five cases that, in my experience, capture many of the challenges we often face in working with psychological data. In each of these cases, we will use a codebook of the form we discussed in the previous tutorial on codebooks.
All of these share a similar feature: multiple files. There are a variety of other techniques you could use to get your data into a usable form, such as those below:
But let’s not do that. Let’s use iteration to make our process efficient and transparent.
We will start with a data storage format that is very common in experimental studies in various fields of psychology as well as in observational studies of repeated assessments of individuals (i.e. ESM, EMA, etc.).
For this first example, I’ll show you how this would look with a for loop before I show you how it looks with purrr.
Assuming you have all the data in a single folder and the format is reasonably similar, you have the following basic syntax:
data_path <- ""
files <- list.files(data_path)
data <- list()
for(i in files){
data[[i]] <- read.csv(i, stringsAsFactors = F)
}
data <- combine(data)This works fine in this simple case, but where purrr really shines in when you need to make modifications to your data before combining, whether this be recoding, removing missing cases, or renaming variables.
But first, the simple case of reading data.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_100 = col_double(),
## A_103 = col_double(),
## A_105 = col_double(),
## A_106 = col_double(),
## A_11 = col_double(),
## A_114 = col_double(),
## A_120 = col_double(),
## A_123 = col_double(),
## A_125 = col_double(),
## A_127 = col_double(),
## A_13 = col_double(),
## A_133 = col_double(),
## A_135 = col_double(),
## A_136 = col_double(),
## A_140 = col_double(),
## A_141 = col_double(),
## A_143 = col_double(),
## A_144 = col_double(),
## A_146 = col_double()
## # ... with 409 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_100 = col_double(),
## A_101 = col_double(),
## A_102 = col_double(),
## A_105 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_11 = col_double(),
## A_110 = col_double(),
## A_112 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_116 = col_double(),
## A_117 = col_double(),
## A_16 = col_double(),
## A_18 = col_double(),
## A_19 = col_double(),
## A_2 = col_double(),
## A_21 = col_double(),
## A_24 = col_double(),
## A_3 = col_double()
## # ... with 241 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_104 = col_double(),
## A_106 = col_double(),
## A_11 = col_double(),
## A_111 = col_double(),
## A_112 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_116 = col_double(),
## A_118 = col_double(),
## A_12 = col_double(),
## A_120 = col_double(),
## A_123 = col_double(),
## A_124 = col_double(),
## A_125 = col_double(),
## A_126 = col_double(),
## A_128 = col_double(),
## A_129 = col_double(),
## A_13 = col_double(),
## A_130 = col_double(),
## A_131 = col_double()
## # ... with 412 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_101 = col_double(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_109 = col_double(),
## A_110 = col_double(),
## A_111 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_116 = col_double(),
## A_118 = col_double(),
## A_120 = col_double(),
## A_121 = col_double(),
## A_123 = col_double(),
## A_126 = col_double(),
## A_130 = col_double()
## # ... with 398 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_102 = col_double(),
## A_104 = col_double(),
## A_105 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_109 = col_double(),
## A_111 = col_double(),
## A_117 = col_double(),
## A_118 = col_double(),
## A_120 = col_double(),
## A_126 = col_double(),
## A_127 = col_double(),
## A_128 = col_double(),
## A_13 = col_double(),
## A_134 = col_double(),
## A_135 = col_double(),
## A_137 = col_double(),
## A_139 = col_double(),
## A_141 = col_double(),
## A_143 = col_double()
## # ... with 373 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_100 = col_double(),
## A_101 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_105 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_11 = col_double(),
## A_112 = col_double(),
## A_114 = col_double(),
## A_124 = col_double(),
## A_125 = col_double(),
## A_13 = col_double(),
## A_135 = col_double(),
## A_136 = col_double(),
## A_137 = col_double(),
## A_139 = col_double(),
## A_14 = col_double(),
## A_140 = col_double()
## # ... with 493 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_100 = col_double(),
## A_102 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_109 = col_double(),
## A_112 = col_double(),
## A_114 = col_double(),
## A_116 = col_double(),
## A_118 = col_double(),
## A_119 = col_double(),
## A_120 = col_double(),
## A_121 = col_double(),
## A_126 = col_double(),
## A_129 = col_double(),
## A_132 = col_double(),
## A_136 = col_double(),
## A_14 = col_double(),
## A_140 = col_double(),
## A_143 = col_double()
## # ... with 301 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_100 = col_double(),
## A_102 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_111 = col_double(),
## A_112 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_117 = col_double(),
## A_118 = col_double(),
## A_119 = col_double(),
## A_120 = col_double(),
## A_121 = col_double(),
## A_122 = col_double(),
## A_14 = col_double(),
## A_18 = col_double(),
## A_20 = col_double(),
## A_21 = col_double(),
## A_23 = col_double()
## # ... with 259 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_102 = col_double(),
## A_104 = col_double(),
## A_106 = col_double(),
## A_108 = col_double(),
## A_109 = col_double(),
## A_11 = col_double(),
## A_110 = col_double(),
## A_111 = col_double(),
## A_113 = col_double(),
## A_116 = col_double(),
## A_117 = col_double(),
## A_119 = col_double(),
## A_12 = col_double(),
## A_120 = col_double(),
## A_124 = col_double(),
## A_128 = col_double(),
## A_129 = col_double(),
## A_132 = col_double()
## # ... with 310 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_100 = col_double(),
## A_104 = col_double(),
## A_105 = col_double(),
## A_106 = col_double(),
## A_109 = col_double(),
## A_110 = col_double(),
## A_111 = col_double(),
## A_113 = col_double(),
## A_12 = col_double(),
## A_120 = col_double(),
## A_123 = col_double(),
## A_14 = col_double(),
## A_15 = col_double(),
## A_17 = col_double(),
## A_21 = col_double(),
## A_25 = col_double(),
## A_28 = col_double(),
## A_29 = col_double(),
## A_32 = col_double(),
## A_33 = col_double()
## # ... with 255 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_100 = col_double(),
## A_103 = col_double(),
## A_105 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_109 = col_double(),
## A_13 = col_double(),
## A_14 = col_double(),
## A_15 = col_double(),
## A_18 = col_double(),
## A_19 = col_double(),
## A_2 = col_double(),
## A_20 = col_double(),
## A_24 = col_double(),
## A_27 = col_double(),
## A_29 = col_double(),
## A_30 = col_double(),
## A_34 = col_double(),
## A_35 = col_double()
## # ... with 210 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_11 = col_double(),
## A_12 = col_double(),
## A_15 = col_double(),
## A_16 = col_double(),
## A_18 = col_double(),
## A_19 = col_double(),
## A_21 = col_double(),
## A_22 = col_double(),
## A_26 = col_double(),
## A_27 = col_double(),
## A_29 = col_double(),
## A_32 = col_double(),
## A_33 = col_double(),
## A_37 = col_double(),
## A_4 = col_double(),
## A_40 = col_double(),
## A_43 = col_double(),
## A_44 = col_double(),
## A_46 = col_double()
## # ... with 134 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_100 = col_double(),
## A_101 = col_double(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_105 = col_double(),
## A_106 = col_double(),
## A_11 = col_double(),
## A_111 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_117 = col_double(),
## A_12 = col_double(),
## A_14 = col_double(),
## A_18 = col_double(),
## A_19 = col_double(),
## A_2 = col_double(),
## A_22 = col_double(),
## A_24 = col_double()
## # ... with 254 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_100 = col_double(),
## A_103 = col_double(),
## A_105 = col_double(),
## A_110 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_12 = col_double(),
## A_120 = col_double(),
## A_121 = col_double(),
## A_124 = col_double(),
## A_126 = col_double(),
## A_128 = col_double(),
## A_129 = col_double(),
## A_13 = col_double(),
## A_130 = col_double(),
## A_134 = col_double(),
## A_135 = col_double(),
## A_18 = col_double(),
## A_19 = col_double()
## # ... with 264 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_100 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_107 = col_double(),
## A_11 = col_double(),
## A_111 = col_double(),
## A_112 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_117 = col_double(),
## A_120 = col_double(),
## A_121 = col_double(),
## A_123 = col_double(),
## A_125 = col_double(),
## A_130 = col_double(),
## A_131 = col_double(),
## A_133 = col_double(),
## A_134 = col_double(),
## A_136 = col_double()
## # ... with 348 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_101 = col_double(),
## A_102 = col_double(),
## A_105 = col_double(),
## A_106 = col_double(),
## A_108 = col_double(),
## A_11 = col_double(),
## A_111 = col_double(),
## A_112 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_120 = col_double(),
## A_122 = col_double(),
## A_129 = col_double(),
## A_13 = col_double(),
## A_131 = col_double(),
## A_134 = col_double(),
## A_135 = col_double(),
## A_137 = col_double(),
## A_14 = col_double()
## # ... with 264 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_14 = col_double(),
## A_15 = col_double(),
## A_16 = col_double(),
## A_18 = col_double(),
## A_19 = col_double(),
## A_20 = col_double(),
## A_21 = col_double(),
## A_22 = col_double(),
## A_23 = col_double(),
## A_24 = col_double(),
## A_26 = col_double(),
## A_28 = col_double(),
## A_29 = col_double(),
## A_3 = col_double(),
## A_30 = col_double(),
## A_34 = col_double(),
## A_36 = col_double(),
## A_38 = col_double()
## # ... with 205 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_11 = col_double(),
## A_110 = col_double(),
## A_111 = col_double(),
## A_112 = col_double(),
## A_114 = col_double(),
## A_120 = col_double(),
## A_121 = col_double(),
## A_123 = col_double(),
## A_125 = col_double(),
## A_127 = col_double(),
## A_128 = col_double(),
## A_13 = col_double(),
## A_132 = col_double(),
## A_133 = col_double(),
## A_134 = col_double(),
## A_135 = col_double(),
## A_136 = col_double()
## # ... with 357 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_100 = col_double(),
## A_101 = col_double(),
## A_102 = col_double(),
## A_105 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_109 = col_double(),
## A_11 = col_double(),
## A_111 = col_double(),
## A_112 = col_double(),
## A_117 = col_double(),
## A_118 = col_double(),
## A_119 = col_double(),
## A_121 = col_double(),
## A_123 = col_double(),
## A_124 = col_double(),
## A_125 = col_double()
## # ... with 287 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_101 = col_double(),
## A_103 = col_double(),
## A_105 = col_double(),
## A_107 = col_double(),
## A_11 = col_double(),
## A_110 = col_double(),
## A_112 = col_double(),
## A_113 = col_double(),
## A_115 = col_double(),
## A_119 = col_double(),
## A_12 = col_double(),
## A_121 = col_double(),
## A_122 = col_double(),
## A_124 = col_double(),
## A_125 = col_double(),
## A_126 = col_double(),
## A_127 = col_double(),
## A_128 = col_double(),
## A_131 = col_double()
## # ... with 297 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_12 = col_double(),
## A_16 = col_double(),
## A_19 = col_double(),
## A_23 = col_double(),
## A_27 = col_double(),
## A_28 = col_double(),
## A_29 = col_double(),
## A_3 = col_double(),
## A_32 = col_double(),
## A_33 = col_double(),
## A_34 = col_double(),
## A_35 = col_double(),
## A_40 = col_double(),
## A_44 = col_double(),
## A_45 = col_double(),
## A_46 = col_double(),
## A_47 = col_double(),
## A_55 = col_double(),
## A_57 = col_double()
## # ... with 142 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_100 = col_double(),
## A_105 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_110 = col_double(),
## A_111 = col_double(),
## A_112 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_116 = col_double(),
## A_117 = col_double(),
## A_118 = col_double(),
## A_119 = col_double(),
## A_120 = col_double(),
## A_126 = col_double(),
## A_129 = col_double(),
## A_131 = col_double(),
## A_133 = col_double()
## # ... with 282 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_11 = col_double(),
## A_13 = col_double(),
## A_2 = col_double(),
## A_21 = col_double(),
## A_24 = col_double(),
## A_25 = col_double(),
## A_26 = col_double(),
## A_27 = col_double(),
## A_28 = col_double(),
## A_29 = col_double(),
## A_30 = col_double(),
## A_31 = col_double(),
## A_32 = col_double(),
## A_35 = col_double(),
## A_38 = col_double(),
## A_39 = col_double(),
## A_4 = col_double(),
## A_42 = col_double()
## # ... with 98 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_101 = col_double(),
## A_102 = col_double(),
## A_104 = col_double(),
## A_105 = col_double(),
## A_13 = col_double(),
## A_14 = col_double(),
## A_15 = col_double(),
## A_16 = col_double(),
## A_17 = col_double(),
## A_18 = col_double(),
## A_19 = col_double(),
## A_20 = col_double(),
## A_22 = col_double(),
## A_23 = col_double(),
## A_24 = col_double(),
## A_25 = col_double(),
## A_26 = col_double(),
## A_28 = col_double(),
## A_3 = col_double()
## # ... with 222 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_100 = col_double(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_106 = col_double(),
## A_108 = col_double(),
## A_11 = col_double(),
## A_112 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_117 = col_double(),
## A_118 = col_double(),
## A_12 = col_double(),
## A_120 = col_double(),
## A_121 = col_double(),
## A_122 = col_double(),
## A_123 = col_double(),
## A_125 = col_double(),
## A_127 = col_double()
## # ... with 273 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_101 = col_double(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_105 = col_double(),
## A_107 = col_double(),
## A_109 = col_double(),
## A_110 = col_double(),
## A_112 = col_double(),
## A_113 = col_double(),
## A_115 = col_double(),
## A_118 = col_double(),
## A_14 = col_double(),
## A_16 = col_double(),
## A_17 = col_double(),
## A_22 = col_double(),
## A_23 = col_double(),
## A_26 = col_double(),
## A_28 = col_double()
## # ... with 227 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_105 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_109 = col_double(),
## A_110 = col_double(),
## A_111 = col_double(),
## A_112 = col_double(),
## A_116 = col_double(),
## A_118 = col_double(),
## A_120 = col_double(),
## A_129 = col_double(),
## A_134 = col_double(),
## A_137 = col_double(),
## A_140 = col_double(),
## A_16 = col_double(),
## A_17 = col_double(),
## A_19 = col_double()
## # ... with 274 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_11 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_116 = col_double(),
## A_117 = col_double(),
## A_118 = col_double(),
## A_119 = col_double(),
## A_121 = col_double(),
## A_122 = col_double(),
## A_124 = col_double(),
## A_125 = col_double(),
## A_126 = col_double(),
## A_127 = col_double(),
## A_128 = col_double(),
## A_129 = col_double(),
## A_130 = col_double()
## # ... with 337 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_100 = col_double(),
## A_104 = col_double(),
## A_105 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_109 = col_double(),
## A_111 = col_double(),
## A_113 = col_double(),
## A_115 = col_double(),
## A_119 = col_double(),
## A_12 = col_double(),
## A_121 = col_double(),
## A_122 = col_double(),
## A_123 = col_double(),
## A_126 = col_double(),
## A_127 = col_double(),
## A_129 = col_double(),
## A_13 = col_double(),
## A_130 = col_double()
## # ... with 283 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_121 = col_double(),
## A_123 = col_double(),
## A_125 = col_double(),
## A_126 = col_double(),
## A_130 = col_double(),
## A_134 = col_double(),
## A_143 = col_double(),
## A_144 = col_double(),
## A_145 = col_double(),
## A_146 = col_double()
## # ... with 310 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_11 = col_double(),
## A_12 = col_double(),
## A_14 = col_double(),
## A_16 = col_double(),
## A_18 = col_double(),
## A_19 = col_double(),
## A_2 = col_double(),
## A_20 = col_double(),
## A_21 = col_double(),
## A_22 = col_double(),
## A_25 = col_double(),
## A_28 = col_double(),
## A_3 = col_double(),
## A_30 = col_double(),
## A_31 = col_double(),
## A_32 = col_double(),
## A_33 = col_double(),
## A_38 = col_double(),
## A_39 = col_double()
## # ... with 192 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_109 = col_double(),
## A_111 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_117 = col_double(),
## A_12 = col_double(),
## A_14 = col_double(),
## A_20 = col_double(),
## A_22 = col_double(),
## A_23 = col_double(),
## A_24 = col_double(),
## A_25 = col_double(),
## A_27 = col_double(),
## A_30 = col_double(),
## A_33 = col_double(),
## A_37 = col_double()
## # ... with 228 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_109 = col_double(),
## A_11 = col_double(),
## A_111 = col_double(),
## A_113 = col_double(),
## A_118 = col_double(),
## A_119 = col_double(),
## A_120 = col_double(),
## A_122 = col_double(),
## A_126 = col_double(),
## A_128 = col_double(),
## A_130 = col_double(),
## A_135 = col_double(),
## A_139 = col_double(),
## A_14 = col_double(),
## A_141 = col_double()
## # ... with 306 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_109 = col_double(),
## A_111 = col_double(),
## A_114 = col_double(),
## A_117 = col_double(),
## A_12 = col_double(),
## A_120 = col_double(),
## A_121 = col_double(),
## A_122 = col_double(),
## A_123 = col_double(),
## A_127 = col_double(),
## A_128 = col_double(),
## A_13 = col_double(),
## A_131 = col_double(),
## A_132 = col_double(),
## A_134 = col_double(),
## A_138 = col_double()
## # ... with 271 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_100 = col_double(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_105 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_109 = col_double(),
## A_114 = col_double(),
## A_116 = col_double(),
## A_117 = col_double(),
## A_118 = col_double(),
## A_120 = col_double(),
## A_122 = col_double(),
## A_126 = col_double(),
## A_13 = col_double(),
## A_14 = col_double(),
## A_17 = col_double(),
## A_21 = col_double(),
## A_22 = col_double()
## # ... with 255 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_100 = col_double(),
## A_104 = col_double(),
## A_105 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_14 = col_double(),
## A_16 = col_double(),
## A_20 = col_double(),
## A_21 = col_double(),
## A_22 = col_double(),
## A_23 = col_double(),
## A_24 = col_double(),
## A_25 = col_double(),
## A_26 = col_double(),
## A_29 = col_double(),
## A_3 = col_double(),
## A_34 = col_double(),
## A_37 = col_double(),
## A_39 = col_double()
## # ... with 210 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_13 = col_double(),
## A_14 = col_double(),
## A_16 = col_double(),
## A_17 = col_double(),
## A_18 = col_double(),
## A_20 = col_double(),
## A_22 = col_double(),
## A_24 = col_double(),
## A_25 = col_double(),
## A_26 = col_double(),
## A_28 = col_double(),
## A_29 = col_double(),
## A_3 = col_double(),
## A_30 = col_double(),
## A_31 = col_double(),
## A_32 = col_double(),
## A_33 = col_double(),
## A_34 = col_double(),
## A_35 = col_double()
## # ... with 119 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_101 = col_double(),
## A_102 = col_double(),
## A_104 = col_double(),
## A_106 = col_double(),
## A_11 = col_double(),
## A_111 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_116 = col_double(),
## A_117 = col_double(),
## A_118 = col_double(),
## A_119 = col_double(),
## A_12 = col_double(),
## A_120 = col_double(),
## A_123 = col_double(),
## A_125 = col_double(),
## A_126 = col_double(),
## A_128 = col_double(),
## A_129 = col_double(),
## A_130 = col_double()
## # ... with 310 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_100 = col_double(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_108 = col_double(),
## A_11 = col_double(),
## A_111 = col_double(),
## A_112 = col_double(),
## A_113 = col_double(),
## A_115 = col_double(),
## A_116 = col_double(),
## A_117 = col_double(),
## A_120 = col_double(),
## A_124 = col_double(),
## A_125 = col_double(),
## A_126 = col_double(),
## A_13 = col_double(),
## A_14 = col_double()
## # ... with 246 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_12 = col_double(),
## A_13 = col_double(),
## A_16 = col_double(),
## A_18 = col_double(),
## A_19 = col_double(),
## A_20 = col_double(),
## A_22 = col_double(),
## A_23 = col_double(),
## A_24 = col_double(),
## A_26 = col_double(),
## A_27 = col_double(),
## A_29 = col_double(),
## A_3 = col_double(),
## A_31 = col_double(),
## A_32 = col_double(),
## A_34 = col_double(),
## A_38 = col_double(),
## A_4 = col_double()
## # ... with 98 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_101 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_106 = col_double(),
## A_11 = col_double(),
## A_110 = col_double(),
## A_111 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_119 = col_double(),
## A_121 = col_double(),
## A_122 = col_double(),
## A_123 = col_double(),
## A_127 = col_double(),
## A_128 = col_double(),
## A_13 = col_double(),
## A_131 = col_double()
## # ... with 331 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_100 = col_double(),
## A_101 = col_double(),
## A_103 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_109 = col_double(),
## A_11 = col_double(),
## A_110 = col_double(),
## A_113 = col_double(),
## A_115 = col_double(),
## A_121 = col_double(),
## A_126 = col_double(),
## A_127 = col_double(),
## A_128 = col_double(),
## A_13 = col_double(),
## A_130 = col_double(),
## A_131 = col_double(),
## A_132 = col_double()
## # ... with 305 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_100 = col_double(),
## A_101 = col_double(),
## A_102 = col_double(),
## A_104 = col_double(),
## A_105 = col_double(),
## A_107 = col_double(),
## A_109 = col_double(),
## A_111 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_116 = col_double(),
## A_121 = col_double(),
## A_122 = col_double(),
## A_124 = col_double(),
## A_126 = col_double(),
## A_127 = col_double(),
## A_130 = col_double(),
## A_131 = col_double(),
## A_133 = col_double()
## # ... with 440 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_11 = col_double(),
## A_111 = col_double(),
## A_112 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_12 = col_double(),
## A_123 = col_double(),
## A_125 = col_double(),
## A_129 = col_double(),
## A_13 = col_double(),
## A_132 = col_double(),
## A_134 = col_double(),
## A_135 = col_double()
## # ... with 317 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_111 = col_double(),
## A_116 = col_double(),
## A_121 = col_double(),
## A_122 = col_double(),
## A_124 = col_double(),
## A_125 = col_double(),
## A_126 = col_double(),
## A_128 = col_double(),
## A_131 = col_double(),
## A_133 = col_double(),
## A_136 = col_double(),
## A_137 = col_double(),
## A_14 = col_double(),
## A_141 = col_double()
## # ... with 359 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_101 = col_double(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_105 = col_double(),
## A_11 = col_double(),
## A_110 = col_double(),
## A_111 = col_double(),
## A_112 = col_double(),
## A_114 = col_double(),
## A_116 = col_double(),
## A_117 = col_double(),
## A_118 = col_double(),
## A_12 = col_double(),
## A_121 = col_double(),
## A_123 = col_double(),
## A_129 = col_double(),
## A_131 = col_double(),
## A_134 = col_double()
## # ... with 334 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_101 = col_double(),
## A_103 = col_double(),
## A_105 = col_double(),
## A_106 = col_double(),
## A_114 = col_double(),
## A_118 = col_double(),
## A_119 = col_double(),
## A_12 = col_double(),
## A_122 = col_double(),
## A_127 = col_double(),
## A_128 = col_double(),
## A_13 = col_double(),
## A_131 = col_double(),
## A_132 = col_double(),
## A_139 = col_double(),
## A_14 = col_double(),
## A_141 = col_double(),
## A_142 = col_double(),
## A_144 = col_double(),
## A_15 = col_double()
## # ... with 357 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_100 = col_double(),
## A_101 = col_double(),
## A_102 = col_double(),
## A_104 = col_double(),
## A_106 = col_double(),
## A_108 = col_double(),
## A_109 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_119 = col_double(),
## A_12 = col_double(),
## A_121 = col_double(),
## A_125 = col_double(),
## A_127 = col_double(),
## A_128 = col_double(),
## A_13 = col_double(),
## A_130 = col_double(),
## A_132 = col_double()
## # ... with 275 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_11 = col_double(),
## A_117 = col_double(),
## A_120 = col_double(),
## A_125 = col_double(),
## A_128 = col_double(),
## A_13 = col_double(),
## A_131 = col_double(),
## A_132 = col_double(),
## A_133 = col_double(),
## A_137 = col_double(),
## A_138 = col_double(),
## A_142 = col_double(),
## A_143 = col_double(),
## A_144 = col_double(),
## A_145 = col_double(),
## A_148 = col_double()
## # ... with 371 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_100 = col_double(),
## A_102 = col_double(),
## A_104 = col_double(),
## A_106 = col_double(),
## A_11 = col_double(),
## A_110 = col_double(),
## A_111 = col_double(),
## A_113 = col_double(),
## A_117 = col_double(),
## A_119 = col_double(),
## A_12 = col_double(),
## A_120 = col_double(),
## A_121 = col_double(),
## A_123 = col_double(),
## A_126 = col_double(),
## A_127 = col_double(),
## A_128 = col_double(),
## A_129 = col_double(),
## A_13 = col_double()
## # ... with 311 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_100 = col_double(),
## A_101 = col_double(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_107 = col_double(),
## A_112 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_117 = col_double(),
## A_119 = col_double(),
## A_122 = col_double(),
## A_127 = col_double(),
## A_130 = col_double(),
## A_132 = col_double(),
## A_133 = col_double(),
## A_134 = col_double(),
## A_136 = col_double(),
## A_137 = col_double()
## # ... with 322 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_101 = col_double(),
## A_103 = col_double(),
## A_108 = col_double(),
## A_112 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_118 = col_double(),
## A_119 = col_double(),
## A_12 = col_double(),
## A_122 = col_double(),
## A_124 = col_double(),
## A_125 = col_double(),
## A_129 = col_double(),
## A_131 = col_double(),
## A_133 = col_double(),
## A_134 = col_double(),
## A_135 = col_double(),
## A_137 = col_double()
## # ... with 331 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_10 = col_double(),
## A_101 = col_double(),
## A_106 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_109 = col_double(),
## A_11 = col_double(),
## A_115 = col_double(),
## A_118 = col_double(),
## A_12 = col_double(),
## A_120 = col_double(),
## A_125 = col_double(),
## A_126 = col_double(),
## A_128 = col_double(),
## A_129 = col_double(),
## A_132 = col_double(),
## A_133 = col_double(),
## A_135 = col_double(),
## A_136 = col_double(),
## A_137 = col_double()
## # ... with 389 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_102 = col_double(),
## A_104 = col_double(),
## A_105 = col_double(),
## A_107 = col_double(),
## A_11 = col_double(),
## A_116 = col_double(),
## A_117 = col_double(),
## A_118 = col_double(),
## A_119 = col_double(),
## A_12 = col_double(),
## A_120 = col_double(),
## A_123 = col_double(),
## A_124 = col_double(),
## A_125 = col_double(),
## A_129 = col_double(),
## A_131 = col_double(),
## A_134 = col_double(),
## A_135 = col_double()
## # ... with 328 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_100 = col_double(),
## A_101 = col_double(),
## A_102 = col_double(),
## A_103 = col_double(),
## A_108 = col_double(),
## A_109 = col_double(),
## A_111 = col_double(),
## A_112 = col_double(),
## A_113 = col_double(),
## A_115 = col_double(),
## A_116 = col_double(),
## A_118 = col_double(),
## A_119 = col_double(),
## A_123 = col_double(),
## A_124 = col_double(),
## A_125 = col_double(),
## A_127 = col_double(),
## A_128 = col_double(),
## A_129 = col_double(),
## A_13 = col_double()
## # ... with 264 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_double(),
## A_1 = col_integer(),
## A_12 = col_integer(),
## A_15 = col_integer(),
## A_17 = col_integer(),
## A_19 = col_integer(),
## A_2 = col_integer(),
## A_20 = col_integer(),
## A_24 = col_integer(),
## A_3 = col_integer(),
## A_31 = col_integer(),
## A_33 = col_integer(),
## A_35 = col_integer(),
## A_36 = col_integer(),
## A_37 = col_integer(),
## A_43 = col_integer(),
## A_44 = col_integer(),
## A_45 = col_integer(),
## A_46 = col_integer(),
## A_48 = col_integer(),
## A_51 = col_integer()
## # ... with 167 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_100 = col_double(),
## A_101 = col_double(),
## A_104 = col_double(),
## A_105 = col_double(),
## A_110 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_117 = col_double(),
## A_12 = col_double(),
## A_123 = col_double(),
## A_126 = col_double(),
## A_127 = col_double(),
## A_128 = col_double(),
## A_13 = col_double(),
## A_133 = col_double(),
## A_135 = col_double(),
## A_137 = col_double(),
## A_139 = col_double()
## # ... with 275 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_103 = col_double(),
## A_104 = col_double(),
## A_107 = col_double(),
## A_109 = col_double(),
## A_110 = col_double(),
## A_113 = col_double(),
## A_116 = col_double(),
## A_117 = col_double(),
## A_119 = col_double(),
## A_12 = col_double(),
## A_121 = col_double(),
## A_123 = col_double(),
## A_124 = col_double(),
## A_126 = col_double(),
## A_127 = col_double(),
## A_129 = col_double(),
## A_134 = col_double(),
## A_135 = col_double()
## # ... with 251 more columns
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer(),
## A_1 = col_double(),
## A_10 = col_double(),
## A_103 = col_double(),
## A_107 = col_double(),
## A_108 = col_double(),
## A_109 = col_double(),
## A_110 = col_double(),
## A_112 = col_double(),
## A_113 = col_double(),
## A_114 = col_double(),
## A_115 = col_double(),
## A_116 = col_double(),
## A_118 = col_double(),
## A_120 = col_double(),
## A_123 = col_double(),
## A_125 = col_double(),
## A_127 = col_double(),
## A_128 = col_double(),
## A_129 = col_double(),
## A_131 = col_double()
## # ... with 344 more columns
## )
## See spec(...) for full column specifications.
data_path <- "~/Documents/R-tutorials/ALDA/week_3_purrr"
df1 <- tibble(ID = list.files(sprintf("%s/data/example_1", data_path))) %>%
mutate(path = sprintf("%s/data/example_1/%s", data_path, ID),
data = map(path, read_csv),
ID = str_remove(ID, ".csv")) %>%
unnest(data) %>%
select(-path)The code above creates a list of ID’s from the data path (files named for each person), reads the data in using the map() function from purrr, removes the “.csv” from the ID variable, then unnests the data, resulting in a data frame for each person.
But often, we have variable names that aren’t super informative, so we want to rename them. In this case, we need to use our codebook to give them more informative variable names.
In this case, where all people have the same variables, it’s easiest to just rename them after unnesting, so the full code would look like this:
## Parsed with column specification:
## cols(
## new_name = col_character(),
## old_name = col_character()
## )
old.names <- codebook$old_name
new.names <- codebook$new_name
data_path <- "~/Documents/R-tutorials/ALDA/week_3_purrr"
df1 <- tibble(ID = list.files(sprintf("%s/data/example_1", data_path))) %>%
mutate(path = sprintf("%s/data/example_1/%s", data_path, ID),
data = map(path, read_csv),
ID = str_remove(ID, ".csv"))%>%
unnest(data) %>%
select(ID, old.names) %>%
setNames(c("ID", new.names))In some cases, participants may have different variables. This could be do to a skip rule in a study or intentionally different variable collection (e.g. in between-person experiments or idiographic work like I do). In this case, we might need to filter or rename variables within our iterative loop.
In this case, all participants have the same set of core variables but were randomly assigned to complete one additional scale.
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## C_Rspnbl = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## C_Rspnbl = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## C_Rspnbl = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## C_Rspnbl = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## C_Rspnbl = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## C_Rspnbl = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## C_Rspnbl = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## A_Rspct = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## N_Anxty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## C_Rspnbl = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## A_Rspct = col_double(),
## C_Rspnbl = col_double(),
## A_Cmpn = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## A_Trust = col_double(),
## E_Scblty = col_double()
## )
## Parsed with column specification:
## cols(
## O_AesSens = col_double(),
## E_Assert = col_double(),
## N_Depr = col_double(),
## N_EmoVol = col_double(),
## O_IntCur = col_double(),
## C_Org = col_double(),
## C_Rspnbl = col_double(),
## O_CrtvImag = col_double(),
## E_EnerLev = col_double(),
## C_Prdctv = col_double(),
## N_Anxty = col_double(),
## E_Scblty = col_double()
## )
In some cases, instead of multiple files for each participant, we collect a single file for all participants across different waves (e.g. using Qualtrics). In this case, we need to index the files a little differently. Instead of reading in files for participants, we need to read in files for waves, which may be named in a variety of ways.
Here, I’ll start with a simple example of data that were well-managed and nicely named the same except for wave content. This is a good practice to do. I’m in general against modifying data, but I am a fan of changing file names because I think this actually helps with data management and prevents the need to actually go in and modify information within files.
These data come from a longitudinal study of personality. We have seven waves, and the variable names for all items are consistent across waves. In this case, our code is almost identical to reading in multiple files for each participant, except that now we have wave info and will need to toss out part of the file names at the end.
## Parsed with column specification:
## cols(
## old_name = col_character(),
## item_text = col_character(),
## scale = col_character(),
## new_name = col_character(),
## rev_code = col_integer(),
## type = col_character(),
## var = col_character()
## )
old.names <- str_remove_all(codebook$old_name, "[ ]")
new.names <- codebook$new_name
df3 <- tibble(wave = paste("T", 1:7, sep = ""),
path = sprintf("%s/ALDA/week_3_purrr/data/example_3/%s.csv", data_path, wave)) %>%
mutate(data = map(path, read_csv),
wave = as.numeric(str_extract_all(wave, "[0-9]"))) %>%
select(-path) %>%
unnest(data) %>%
select(old.names) %>%
setNames(new.names)## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
The only change from the code for reading in multiple files for participants is that we have “wave” as a variable instead of “ID” and we use the str_extract_all() function from the stringr package (part of tidyverse) to get rid of everything except the numeric wave value.
Oftentimes, however, we do not have the same variables across waves or they do have the same names across waves. In those cases, we’ll have to do a little extra work to get our data into a form where we can unnest() them – that is where shared column names will actually be shared.
We’ll start with the case where we have some additional information (e.g. demographics) in the first wave.
These data are the same as we used in the previous example except that I changed the names and added demographic information for this example. This means that we have slightly different information in wave one and need a way to match the same variables across waves. We’ll use our codebook to achieve this with little issue!
However, because of this, we’ll need to use a function that take the year as input, so that we pull the correct variables from the codebook.
read_fun <- function(Wave){
old.names <- str_remove_all((codebook %>% filter(wave == "All" | wave == Wave))$old_name, "[ ]")
new.names <- (codebook %>% filter(wave == "All" | wave == Wave))$new_name
sprintf("%s/ALDA/week_3_purrr/data/example_4/T%s.csv", data_path, Wave) %>%
read_csv() %>%
select(old.names) %>%
setNames(new.names) %>%
gather(key = item, value = value, -SID)
}
codebook <- sprintf("%s/ALDA/week_3_purrr/data/codebook_ex4.csv", data_path) %>% read_csv## Parsed with column specification:
## cols(
## old_name = col_character(),
## item_text = col_character(),
## scale = col_character(),
## new_name = col_character(),
## rev_code = col_integer(),
## type = col_character(),
## var = col_character(),
## wave = col_character()
## )
df4 <- tibble(wave = 1:7) %>%
mutate(data = map(wave, read_fun)) %>%
unnest(data) %>%
unite(tmp, item, wave, sep = ".") %>%
spread(tmp, value) %>%
gather(key = item, value = value, -SID, -contains("Dem")) %>%
separate(item, c("item", "wave"), sep = "[.]") %>%
spread(item, value) ## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
In other cases, we may have multiple types of files for different waves. Across waves, those variables may be the same or different, but we’ll focus on the case when we largely want the same variables.
codebook <- sprintf("%s/ALDA/week_3_purrr/data/codebook_ex6.csv", data_path) %>%
read_csv %>%
mutate(old_name = str_to_lower(old_name))
path <- "~/Box/network/other projects/PCLE Replication/data/sav_files"
ref <- sprintf("%s/cirdef.sav", path) %>% haven::read_sav(.) %>% select(hhnr, rgroup20)
read_fun <- function(Year){
vars <- (codebook %>% filter(year == Year | year == 0))$old_name
set <- (codebook %>% filter(year == Year))$dataset[1]
sprintf("%s/%s.sav", path, set) %>% haven::read_sav(.) %>%
full_join(ref) %>%
filter(rgroup20 > 10) %>%
select(one_of(vars)) %>%
write.csv(., file = sprintf("~/Documents/Github/R-tutorials/ALDA/week_3_purrr/data/example_6/%s.csv", set), row.names = F)
}
vars <- (codebook %>% filter(year == 0))$old_name
sprintf("%s/ppfad.sav", path) %>%
haven::read_sav(.) %>%
full_join(ref) %>%
filter(rgroup20 > 10) %>%
select(vars) %>%
write.csv(., file = "~/Documents/Github/R-tutorials/ALDA/week_3_purrr/data/example_6/dem.csv", row.names = F)
tibble(year = c(2005:2015)) %>%
mutate(data = map(year, read_fun))Another really powerful feature of purrr is keeping your data, models, tables, plots, etc all conveniently indexed together. Often we need to do this for multiple DV’s or predictors, and you may end up with an environment that looks something like E_fit1, A_fit1, E_fit2, A_fit2 and so on. There’s nothing wrong with this. But eventually you’ll want to pull out coefficients, plot results, etc., and it’s easy to make a copy and paste error or name different types of objects inconsistently, which can be difficult both for future you or someone else using your code.
Before we can learn how to use purrr for this, we need to understand what a nested data frame is. If you’ve ever worked with a list in R, you are halfway there. Basically a nested data frame takes the normal data frame you are probably familiar with and adds some new features. It still has columns, rows, and cells, but what makes up those cells isn’t restrictred to numbers, strings, or logicals. Instead, you can put essentially anything you want: lists, models, data frames, plots, etc!
If this sounds scary, it will hopefully become clearer if we use our read in data from above to run, table, and plot some basic longitudinal models of our data.
codebook <- sprintf("%s/ALDA/week_3_purrr/data/codebook_ex6.csv", data_path) %>%
read_csv %>%
mutate(old_name = str_to_lower(old_name))## Parsed with column specification:
## cols(
## dataset = col_character(),
## old_name = col_character(),
## item_text = col_character(),
## scale = col_character(),
## category = col_character(),
## label = col_character(),
## item_name = col_character(),
## year = col_character(),
## new_name = col_character(),
## reverse = col_integer(),
## mini = col_integer(),
## maxi = col_integer(),
## recode = col_character()
## )
read_fun <- function(Year){
old.names <- (codebook %>% filter(year == Year | year == 0))$old_name
new.names <- (codebook %>% filter(year == Year | year == 0))$new_name
set <- (codebook %>% filter(year == Year))$dataset[1]
sprintf("%s/ALDA/week_3_purrr/data/example_6/%s.csv", data_path, set) %>%
read_csv %>%
select(old.names) %>%
setNames(new.names)
}
(df6 <- tibble(year = 2005:2015) %>%
mutate(data = map(year, read_fun)) %>%
select(-year) %>%
unnest(data) )## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## persnr = col_integer(),
## hhnr = col_integer(),
## wp14107 = col_integer(),
## wp14110 = col_integer(),
## wp14116 = col_integer(),
## wp14122 = col_integer(),
## wp14101 = col_integer(),
## wp14125 = col_integer(),
## wp14104 = col_integer(),
## wp14119 = col_integer(),
## wp14113 = col_integer()
## )
## Parsed with column specification:
## cols(
## persnr = col_integer(),
## hhnr = col_integer(),
## xp14807 = col_integer(),
## xp14813 = col_integer(),
## xp14819 = col_integer(),
## xp14825 = col_integer(),
## xp14801 = col_integer(),
## xp14828 = col_integer(),
## xp14804 = col_integer(),
## xp14822 = col_integer(),
## xp14816 = col_integer()
## )
## Parsed with column specification:
## cols(
## persnr = col_integer(),
## hhnr = col_integer(),
## yp15407 = col_integer(),
## yp15413 = col_integer(),
## yp15419 = col_integer(),
## yp15425 = col_integer(),
## yp15401 = col_integer(),
## yp15428 = col_integer(),
## yp15404 = col_integer(),
## yp15422 = col_integer(),
## yp15416 = col_integer()
## )
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## persnr = col_integer(),
## hhnr = col_integer(),
## bap15907 = col_integer(),
## bap15913 = col_integer(),
## bap15919 = col_integer(),
## bap15925 = col_integer(),
## bap15901 = col_integer(),
## bap15928 = col_integer(),
## bap15904 = col_integer(),
## bap15922 = col_integer(),
## bap15916 = col_integer()
## )
## Parsed with column specification:
## cols(
## persnr = col_integer(),
## hhnr = col_integer(),
## bbp15110 = col_integer(),
## bbp15116 = col_integer(),
## bbp15122 = col_integer(),
## bbp15128 = col_integer(),
## bbp15101 = col_integer(),
## bbp15104 = col_integer(),
## bbp15131 = col_integer(),
## bbp15107 = col_integer(),
## bbp15125 = col_integer(),
## bbp15119 = col_integer()
## )
## Parsed with column specification:
## cols(
## persnr = col_integer(),
## hhnr = col_integer(),
## bcp15010 = col_integer(),
## bcp15016 = col_integer(),
## bcp15022 = col_integer(),
## bcp15028 = col_integer(),
## bcp15001 = col_integer(),
## bcp15004 = col_integer(),
## bcp15031 = col_integer(),
## bcp15007 = col_integer(),
## bcp15025 = col_integer(),
## bcp15019 = col_integer()
## )
## Parsed with column specification:
## cols(
## .default = col_integer()
## )
## See spec(...) for full column specifications.
## Parsed with column specification:
## cols(
## persnr = col_integer(),
## hhnr = col_integer(),
## bep15010 = col_integer(),
## bep15016 = col_integer(),
## bep15022 = col_integer(),
## bep15028 = col_integer(),
## bep15001 = col_integer(),
## bep15004 = col_integer(),
## bep15031 = col_integer(),
## bep15007 = col_integer(),
## bep15025 = col_integer(),
## bep15019 = col_integer()
## )
## Parsed with column specification:
## cols(
## persnr = col_integer(),
## hhnr = col_integer(),
## bfp17310 = col_integer(),
## bfp17316 = col_integer(),
## bfp17322 = col_integer(),
## bfp17328 = col_integer(),
## bfp17301 = col_integer(),
## bfp17304 = col_integer(),
## bfp17331 = col_integer(),
## bfp17307 = col_integer(),
## bfp17325 = col_integer(),
## bfp17319 = col_integer()
## )